// 泛型
// 用来在代码执行时传入的类型，来确定结果

// 泛型就是指定一个表示类型的变量，用它来代替某个实际的类型用于编程
// 而后通过实际调用时传入或推导的类型来对其进行替换
// 以达到一段使用泛型程序可以实际适应不同类型的目的

// eslint-disable-next-line space-before-function-paren
function createArray<T>(len: number, value: T): T[] {
  const result = []
  for (let i = 0; i < len; i++) {
    result.push(value)
  }
  return result
}

const arr = createArray(3, 'hello')
console.log(arr)

// 多个泛型 元组的交换 [string, number] = [number, string]

const swap = <T, K>(tuple: [T, K]): [K, T] => {
  return [tuple[1], tuple[0]]
}

swap<number, number>([1, 2])
